//#define _CRT_SECURE_NO_WARNINGS 1
//#include<iostream>
//#include<thread>
//#include<mutex>
//#include<condition_variable>
//
//using namespace std;
//
//mutex data_mutex;
//condition_variable data_var;
//int flag = 1;
//void printa()
//{
//	int i = 1;
//	while (i <= 100)
//	{
//		std::unique_lock<mutex> lck(data_mutex);
//		data_var.wait(lck, []{return flag % 3 == 1; });
//		cout << "A:" << i << endl;
//		i++;
//		flag++;
//		data_var.notify_all();
//	}
//
//}
//
//void printb()
//{
//	int i = 2;
//	while (i <= 100)
//	{
//		std::unique_lock<mutex> lck(data_mutex);
//		data_var.wait(lck, []{return flag % 3 == 2; });
//		cout << "B:" << i << endl;
//		i++;
//		flag++;
//		data_var.notify_all();
//	}
//}
//
//void printc()
//{
//	int i = 3;
//	while (i <= 100)
//	{
//		std::unique_lock<mutex> lck(data_mutex);
//		data_var.wait(lck, []{return flag % 3 == 0; });
//		cout << "C:" << i << endl;
//		i += 3;
//		flag++;
//		data_var.notify_all();
//	}
//}
//
//int main()
//{
//	thread t1(printa);
//	thread t2(printb);
//	thread t3(printc);
//	
//	t1.join();
//	t2.join();
//	t3.join();
//
//	return 0;
//}